# -*- coding: utf-8 -*-
from django.db import models
from thumbs import ImageWithThumbsField
from django.contrib.auth.models import User
from django.core.urlresolvers import reverse
from django.db.models.signals import post_save

SITUACAO_CHOICES = (('0','Novo'),('1','Usado'),)
STATUS_CHOICES = (('0','Aberto'),('1','Vendido'),)
ESTADOS_CHIOCES = (('AC', 'Acre'), ('AL', 'Alagoas'), ('AP', 'Amapá'), ('AM', 'Amazonas'), ('BA', 'Bahia'), ('CE', 'Ceará'), ('DF', 'Distrito Federal'), ('ES', 'Espírito Santo'), ('GO', 'Goiás'), ('MA', 'Maranhão'), ('MT', 'Mato Grosso'), ('MS', 'Mato Grosso do Sul'), ('MG', 'Minas Gerais'), ('PA', 'Pará'), ('PB', 'Paraiba'), ('PR', 'Parana'), ('PE', 'Pernambuco'), ('PI', 'Piauí'), ('RJ', 'Rio de Janeiro'), ('RN', 'Rio Grande do Norte'), ('RS', 'Rio Grande do Sul'), ('RO', 'Rondônia'), ('RR', 'Roraima'), ('SC', 'Santa Catarina'), ('SP', 'São Paulo'), ('SE', 'Sergipe'), ('TO', 'Tocantins'),)

def produto_imagem(instance, filename):
    return '/'.join(['imagens', str(instance.nomeCategoria.slugcategoria), filename])

class Categoria(models.Model):
    nome = models.CharField('Categoria', unique=True, max_length = 30)
    descricao = models.CharField('Descrição', max_length = 200)
    slugcategoria = models.SlugField(max_length=100, blank=True, unique=True)
    def __unicode__(self):
        return self.nome
    def get_absolute_url(self):
        return reverse('vendotudo.views.categoria', kwargs={'slugcategoria': self.slugcategoria})

class Usuario(models.Model):
    email = models.CharField(max_length=100)
    senha  = models.CharField('Senha*',max_length = 30)
    nome = models.CharField(max_length=100)
    telefone = models.CharField(max_length=15)
    cep = models.CharField(max_length=10, help_text="Ex: 64076-209")
    endereco = models.CharField(max_length=100)
    numero = models.CharField(max_length=5)
    bairro = models.CharField(max_length=30)
    cidade = models.CharField(default="Teresina", max_length=20)
    user = models.ForeignKey(User,blank=True,null=True,editable = False)
    def __unicode__(self):
        return self.nome

    def save(self):
        if not self.id:
            emailRegistrado = Usuario.objects.filter(email = self.email).count()
            if emailRegistrado:
                emailExistente = emailRegistrado

            usr = Usuario.objects.filter(email = self.email)

            if usr:
                u = usr[0]
            else:
                u = User.objects.create_user(self.email, self.email, self.senha)

            u.save()
            self.user = u
        else:
            self.user.username = self.email
            self.user.email = self.email
            self.user.set_password(self.senha)
            self.user.save()


        super(Usuario, self).save()

    class Meta:
        verbose_name_plural = 'Cadastro de usuário'

class Produto(models.Model):
    publicar = models.BooleanField('Publicar', default=True)
    destaque = models.BooleanField('Destacar', default=False)
    situacao = models.CharField('Estado do produto', max_length=3, choices = SITUACAO_CHOICES)
    status = models.CharField('Status', max_length=3, choices = STATUS_CHOICES, default="0")
    nomeUsuario = models.ForeignKey(Usuario)
    nome = models.CharField(max_length = 50)
    descricao = models.TextField(blank=True, null=True)
    nomeCategoria = models.ForeignKey(Categoria)
    foto = ImageWithThumbsField('Foto', upload_to=produto_imagem, sizes=((190,190),(350,350)))
    preco = models.DecimalField(max_digits=10, decimal_places=2, help_text="Ex: 240.00")
    slugproduto = models.SlugField(max_length=100, blank=True)
    datacadastro = models.DateTimeField(auto_now_add=True)
    visualizacoes = models.IntegerField('Cliques', default=0, editable=False)
    def __unicode__(self):
        return self.nome
    def get_absolute_url(self):
        return reverse('vendotudo.views.produto', kwargs={'slugcategoria': self.nomeCategoria.slugcategoria, 'slugproduto': self.slugproduto})

# SIGNALS
from django.db.models import signals
from django.template.defaultfilters import slugify

def categoria_pre_save(signal, instance, sender, **kwargs):
    instance.slugcategoria = slugify(instance.nome)

signals.pre_save.connect(categoria_pre_save, sender=Categoria)

def produto_pre_save(signal, instance, sender, **kwargs):
    if not instance.slugproduto:
        slug = slugify(instance.nome)
        novaslug = slug
        contador = 0

        while  Produto.objects.filter(slugproduto = novaslug).exclude(id=instance.id).count() > 0:
            contador += 1
            novaslug = '%s-%d'%(slug, contador)
        instance.slugproduto = novaslug
signals.pre_save.connect(produto_pre_save, sender=Produto)